#ifndef __TRANSLATION_MATRIX_INFORMATION_CLASS_DEFINE__
#define __TRANSLATION_MATRIX_INFORMATION_CLASS_DEFINE__

#pragma once
#include "MatrixInformation.h"

/*
    描述4*4的矩阵
*/
class TranslationMatrixInformation :
    public MatrixInformation
{
public:
    // 表示矩阵数据的下标
    enum class MATRIX_DATA_INDEX :UINT {
        INDEX0 = 000,
        INDEX1 = 001,
        INDEX2 = 002,
        INDEX3 = 003
    };
protected:
private:
    // 平移的矩阵数据定义
    double(*pTranslationMatrixData)[MATRIX_TRANSLATION_COL_COUNT];
public:
    TranslationMatrixInformation();
    // 清零矩阵的平移部分// 第四行为平移部分
    VOID ZeroTranslation();
    // 清零矩阵内所有表示数据
    VOID ZeroTranslationMatrixData();
    // 使用一个向量初始化矩阵平移部分
    VOID SetTranslation(VectorInformation& vecInfo);
    VectorInformation GetTranslation();
    // 将原矩阵数据先转换成单位矩阵,并且使用一个向量初始化矩阵平移部分
    VOID ConvertToIdentityMatrixSetTranslation(VectorInformation& vecInfo);
    // 打印平移矩阵
    VOID ShowTranslationMatrixInformation();
    // 将原矩阵转换成单位矩阵
    VOID ConvertToIdentityMatrix();

    VOID MatrixShear(ROTATE_TYPE ShearType, double s, double t);

    // xyz轴的矩阵镜像
    VOID MatrixImageXYZ(ROTATE_TYPE type, double k);
    // 任意平面的矩阵镜像
    VOID ArbitraryMatrixImage(VectorInformation& vectorInformation);

    // 矩阵数据转换成二维数组
    VOID GetTranslationMatrixData(double data[MATRIX_TRANSLATION_ROW_COUNT][MATRIX_TRANSLATION_COL_COUNT]);
    // 填充数组的数据到矩阵中
    VOID SetTranslationMatrixData(double data[MATRIX_TRANSLATION_ROW_COUNT][MATRIX_TRANSLATION_COL_COUNT]);
    VOID SetTranslationMatrixData(double data[MATRIX_ROW_COUNT][MATRIX_COL_COUNT]);
    // 投影矩阵
    VOID ProjectionMatrix(VectorInformation& vectorInformation);
    VOID ProjectionMatrix(double x, double y, double z);
    // 缩放矩阵
    VOID SaclingMatrix(double x, double y, double z);
    VOID SaclingMatrix(VectorInformation& vectorInformation);
    // 设置矩阵某一行的数据
    VOID SetTranslationMatrixRowData(MATRIX_DATA_INDEX rowIndex, double rowData[3]);
    VOID RotationMatrix(ROTATE_TYPE type, double angle);

private:
    VOID ShowMatrixInformation() {};
    VOID ZeroMatrixData() {};

};


// 矩阵与矩阵相乘
TranslationMatrixInformation operator*
(TranslationMatrixInformation& trMatrixInfo1, TranslationMatrixInformation& trMatrixInfo2);


#endif